/*
  cookie工作流程：
    1. 客户端向服务器发送请求，请求登录
      服务器判断用户名和密码是否正确，服务器返回一个cookie（用户唯一标识）
    2. 客户端接受到服务器响应，接受cookie
      客户端会自动存储cookie
    3. 将来客户端发送请求，cookie会被自动携带上
      服务器通过解析cookie，从而识别是哪个用户，返回相应的响应
*/

import express from "express";
import cookieParser from "cookie-parser";

const app = express();

const users = [
  {
    id: 1,
    username: "admin",
    password: "111111",
    nickname: "管理员",
  },
];

app.use(express.json()); // 解析 application/json 格式数据
app.use(express.urlencoded({ extended: true })); // 解析 application/x-www-form-urlencoded 格式数据
app.use(cookieParser()); // 解析cookie数据，将cookie解析好放入req.cookies上

// 后端路由
// app[请求方式](请求地址, 处理请求的回调函数)
app.post("/login", (request, response, next) => {
  /*
    request 请求对象（请求首行、请求头、请求体）
      req.method
      req.url
      req.query 
      req.body
    response 响应对象（设置响应体数据、设置响应状态码，设置响应头）
      res.json()
      res.status()
      res.setHeader(key, value)
  */
  // 默认请求下，express不解析请求体参数的，需要使用中间件解析才行
  const { username, password } = request.body;

  // users.find((user) => {
  //   if (user.username === username && user.password === password) return true;
  //   else return false;
  // });

  const user = users.find(
    (user) => user.username === username && user.password === password
  );

  if (user) {
    // 登录成功
    // 返回cookie, 以响应头形式响应给浏览器
    // httpOnly=true 禁止客户端获取cookie
    response.setHeader("set-cookie", `userId=${user.id};httpOnly=true;`);

    response.json({
      code: 200,
      data: null,
    });
  } else {
    // 登录失败
    response.json({
      code: 201,
      message: "用户名或密码错误",
    });
  }
});

app.get("/info", (req, res) => {
  // 默认请求下，express不解析cookie参数的，需要使用中间件解析才行
  const { userId } = req.cookies;
  const user = users.find((user) => user.id === userId);
  res.json({
    code: 200,
    data: {
      nickname: user.nickname,
    },
  });
});

app.listen(3000, (err) => {
  if (err) console.log(err);
  else console.log("服务器启动成功了~");
});
